要在SFML中使用OpenGL,只需要include他
#include <SFML/OpenGL.hpp>
但是此動作只是將function include進來,並沒有將他link起來,因此要記得link OpenGL函式庫,否則會有Link error
在建立視窗時可以指定sf::ContextSettings來設定OpenGL參數。
sf::RenderWindow window(sf::VideoMode(800, 600), "OpenGL", sf::Style::Default, sf::ContextSettings(
24, // depthBits
8, // stencilBits
4, // antialiasingLevel
4, // majorVersion
4 // minorVersion
));
當我們要呼叫OpenGL function的時候,他們會在目前以激活的context上執行。每個SFML Window 在生成的時候都會有OpenGL Context,我們只需要激活他就可以了
window.setActive(true);
一個簡單的SFML視窗配上OpenGL大概會長這樣
#include <iostream>
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
#include <glad/glad.h>
#include <SFML/OpenGL.hpp>
#include <imgui.h>
#include <imgui-SFML.h>
int main()
{
sf::RenderWindow window(sf::VideoMode(800, 600), "OpenGL", sf::Style::Default, sf::ContextSettings(
24, // depthBits
8, // stencilBits
4, // antialiasingLevel
4, // majorVersion
4 // minorVersion
));
window.setVerticalSyncEnabled(true);
// Load OpenGL functions using glad
if (!gladLoadGL())
{
printf("Something went wrong!\n");
exit(-1);
}
ImGui::SFML::Init(window);
window.setActive(true);
bool running = true;
while (running)
{
sf::Event event;
while (window.pollEvent(event))
{
ImGui::SFML::ProcessEvent(event);
if (event.type == sf::Event::Closed)
running = false;
}
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(0.5, 0.5, 0.5, 1);
// draw...
window.display();
}
// release resources...
return 0;
}
以上的結果如下圖

明天我們會來畫一個三角形。